HEX VOCABULARY ASSEMBLER IMMEDIATE 
' ASSEMBLER CFA ' ;CODE 0A + ! 
ASSEMBLER DEFINITIONS 
: CODE   ?EXEC CREATE [COMPILE] ASSEMBLER 
  !CSP ; IMMEDIATE  
: C; CURRENT @ CONTEXT ! ?EXEC 
  ?CSP [COMPILE] SMUDGE ; IMMEDIATE  
: LABEL  ?EXEC 0 VARIABLE  [COMPILE] SMUDGE 
  -2 ALLOT [COMPILE] ASSEMBLER !CSP ; IMMEDIATE 
: 8* DUP + DUP + DUP + ; 

: 3LEFT SWAP 8* + C, ;

: IS CONSTANT ; 

: NEXT DD C, E9 C, ; 


0 CONSTANT B   
1 CONSTANT C   
2 CONSTANT D   
3 CONSTANT E   
4 CONSTANT H   
5 CONSTANT L   
6 CONSTANT M   
7 CONSTANT A   
6 CONSTANT F
6 CONSTANT SP
0 CONSTANT BC
2 CONSTANT DE
4 CONSTANT HL

C2 CONSTANT 0=  
D2 CONSTANT CS  
E2 CONSTANT PE  
F2 CONSTANT 0<

: NOT   8 + ; 

: 1MI   <BUILDS C, C, DOES> DUP >R 1+ C@ 
			1 AND IF 
				ED C,
	         	      ENDIF
	R C@ C,
	R> 1+ C@ DUP 2 AND IF  
				DROP C, 
                           ELSE 4 AND IF ,
		                      ENDIF 
			   ENDIF ;
 
: 2MI   <BUILDS C, C, DOES> >R R 1+ C@ 
			IF CB C, DUP FF = 
				IF DROP 
				   SWAP C, 
				ENDIF 
			   R> C@ + 
			ELSE 
			   DUP FF = 
				IF DROP R> C@ + C, 
				ELSE R> C@ + 
				ENDIF 
			ENDIF C, ;

: 3MI   <BUILDS C, C, DOES> >R 
			DUP FF = IF 
				   DROP DROP R> C@ 30 + C, C,
				ELSE
				  DUP FE = IF 
					     DROP 
						R 1+ C@ IF 
							  DUP FE = IF 
		    						       DROP -1 DP +! 4
								    ENDIF
							ENDIF
					   ENDIF 
			R> C@ 3LEFT 
				ENDIF ; 

: 4MI   <BUILDS C, DOES> CB C, >R >R 
		DUP FF = IF 
			   ROT C, DROP 
			 ENDIF 
  R> R> C@ SWAP 8* + + C, ;

: 5MI   <BUILDS  , DOES> @ , ; 
: 6MI   <BUILDS C, DOES> ED C, C@ 3LEFT ;

  0 76  1MI HALT  
  0 07 1MI RLCA  
  0 0F 1MI RRCA   
  0 17  1MI RLA    
  0 1F 1MI RRA  
  0 C9  1MI RET   
  0 D8 1MI RET-C 
  0 D0 1MI RET-NC 
  0 C8  1MI RET-Z  
  0 C0 1MI RET-NZ  
  0 F0  1MI RET-P 
  0 F8 1MI RET-M 
  0 E8 1MI RET-PE 
  0 E0  1MI RET-PO 
  0 2F 1MI CPL  
  0 37  1MI SCF
  0 3F 1MI CCF   
  0 27 1MI DAA    
  0 FB  1MI EI     
  0 F3 1MI DI  
  0 0  1MI NOP  
  0 E9 1MI PCHL  
  0 F9 1MI SPHL   
  0 E3  1MI XTHL 
  0 EB 1MI XCHG  
  0 8   1MI EXAF 
  0 D9 1MI EXX

  1 6F  1MI RLD
  1 67 1MI RRD
  1 44 1MI NEG
  1 A8  1MI LDD
  
  1 B8  1MI LDDR
  1 B0 1MI LDIR
  1 A3 1MI OUTI
  1 B3  1MI OTIR 
  1 AB  1MI OUTD
  1 BB 1MI OTDR
  1 A2 1MI INI
  1 B2  1MI INIR 
  1 AA  1MI IND
  1 BA 1MI INDR
  1 4D 1MI RETI
  1 45  1MI RETN 
  1 A1  1MI CPI
  1 B1 1MI CPIR
  1 A9 1MI CPD
  1 B9  1MI CPDR  
  1 47  1MI LDIA
  1 57 1MI LDAI
  1 4F 1MI LDRA
  1 5F  1MI LDAR  
  1 46  1MI IM0
  1 56 1MI IM1
  1 5E 1MI IM2
  1 A0  1MI LDI

  2 C6  1MI ADI
   2 CE 1MI ACI
   2 D6 1MI SUI
    2 0DE 1MI SBI
   2 E6 1MI ANI     
  2 EE  1MI XRI
   2 F6 1MI ORI
   2 FE 1MI CPBI
   2 DB  1MI IN
    2 D3 1MI OUT 
  2 18  1MI JR
    2 20 1MI JRNZ
  2 28 1MI JRZ
    2 30  1MI JRNC
  2 38 1MI JRC
  2 10  1MI DJNZ

  4 C3  1MI JP
    4 CD 1MI CALL
  4 32 1MI STA
    4 3A  1MI LDA
   4 22 1MI SHLD     
  4 2A  1MI LHLD
  4 C2 1MI JNZ
   4 CA 1MI JZ
     4 D2  1MI JNC
   4 DA 1MI JC 
  4 E2  1MI JPO
   4 EA 1MI JPE
   4 F2 1MI JPP
    4 FA  1MI JPM
   4 C4 1MI CLNZ
  4 CC  1MI CLZ
   4 D4 1MI CLNC
  4 DC 1MI CLC
    4 E4  1MI CLPO
  4 EC 1MI CLPE 
  4 F4  1MI CLP
   4 FC 1MI CLM

  0 80  2MI ADD
   0 88 2MI ADC
   0 90 2MI SUB
    0 98  2MI SBC
   0 A0 2MI AND  
  0 A8  2MI XOR
   0 B0 2MI OR
    0 B8 2MI CP
     0 C7  2MI RST
   1 0  2MI RLC     
  1 8   2MI RRC
   1 10 2MI RL
    1 18 2MI RR
     1 20  2MI SLA
   1 28 2MI SRA    
  1 38  2MI SRL


  0 04  3MI INC
   0 05 3MI DEC
   0 C5 3MI PUSH
   0 C1  3MI POP
   0 0B 3MI DCX     
  1 09  3MI DAD
   0 02 3MI STAX
  0 0A 3MI LDAX
   0 03  3MI INX

  40  4MI BIT
     80 4MI RES
     C0 4MI SET

  F9DD  5MI SPIX
  F9FD 5MI SPIY
  E9DD 5MI PCIX
   E9FD  5MI PCIY
  E3DD  5MI XTIX
  E3FD 5MI XTIY   

  4A 6MI DADC
  42 6MI DSBC
  40 6MI IN(C)
 41 6MI OUT(C)
  4B 6MI (LXW)
 43 6MI (SXW)

: +IX DD C, 6 FF ; 

: +IY FD C, 6 FF ;

: IX DD C, FE ;

: IY FD C, FE ;



: MOV DUP FF = 
	IF 
	  DROP DROP SWAP 70 + C, 
	ELSE 
	  8* 40 + SWAP DUP FF = 
	     IF 
		DROP + C, 
	     ELSE 
		+ 
	     ENDIF  
	ENDIF 
	C, ;

: MVI DUP FF = IF DROP 36 C, SWAP C, 
  DROP ELSE 6 3LEFT ENDIF C, ;
: LXI DUP FE = IF DROP 4 
  ENDIF 8* 1+ C, , ; 
: LXW DUP FE = IF DROP LHLD 
  ELSE (LXW) , ENDIF ; 
: SXW SWAP DUP FE = IF DROP SHLD 
  ELSE (SXW) , ENDIF ; 

: IF  C, HERE 0 , 2 ;  
 
 : THEN 2 ?PAIRS HERE SWAP ! ; 

 : ELSE 2 ?PAIRS C3 IF ROT 

  SWAP THEN 2 ; 

 : BEGIN   HERE 1 ; 

 : UNTIL   SWAP 1 ?PAIRS 

  C, , ;  

 : AGAIN   1 ?PAIRS 

  C3 C, , ; 

 : WHILE   IF 2+ ; 

 : REPEAT  >R >R 

  AGAIN R> R> 2 - THEN ; 

FORTH DEFINITIONS DECIMAL


